package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IChannelGroupUserDAO;
import org.jsola.hr.dto.ChannelGroupUserAddDTO;
import org.jsola.hr.dto.ChannelGroupUserUpdateDTO;
import org.jsola.hr.entity.ChannelGroupUserDO;
import org.jsola.hr.query.ChannelGroupUserQuery;
import org.jsola.hr.vo.ChannelGroupUserListVO;
import org.jsola.hr.vo.ChannelGroupUserVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 渠道分组用户中间表
 *
 * @author zhr
 */
public interface IChannelGroupUserService extends IService<IChannelGroupUserDAO, ChannelGroupUserDO> {

    /**
     * 通过分组id查询所有的管理员
     *
     * @param channelGroupUserQuery 渠道分组用户中间表查询参数
     * @param tokenUser             当前用户
     * @return LIST
     */
    List<ChannelGroupUserListVO> getUserByGroupId(ChannelGroupUserQuery channelGroupUserQuery, TokenUser tokenUser);

    /**
     * 查询分组的所有主管
     *
     * @param channelGroupId 渠道分组id
     * @param tokenUser      当前用户
     * @return 分组主管
     */
    List<ChannelGroupUserDO> getAllManagerByGroupId(String channelGroupId, TokenUser tokenUser);

    /**
     * 新增渠道分组用户中间表
     *
     * @param channelGroupUserAddDTO 新增渠道分组用户中间表DTO
     * @param tokenUser              当前用户
     * @return 渠道分组用户中间表详情信息
     */
    ChannelGroupUserVO save(ChannelGroupUserAddDTO channelGroupUserAddDTO, TokenUser tokenUser);

    /**
     * 修改渠道分组用户中间表
     *
     * @param channelGroupUserUpdateDTO 修改渠道分组用户中间表DTO
     * @param tokenUser                 当前用户
     * @return 更新数量
     */
    int update(ChannelGroupUserUpdateDTO channelGroupUserUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除渠道分组用户中间表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser           当前用户
     * @param channelGroupUserIds 渠道分组用户中间表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... channelGroupUserIds);

    /**
     * 根据渠道分组用户中间表id查找
     *
     * @param channelGroupUserId 渠道分组用户中间表id
     * @param siteId             所属站点id
     * @return 渠道分组用户中间表详情信息
     */
    ChannelGroupUserVO selectById(String channelGroupUserId, String siteId);

    /**
     * 查询渠道分组用户中间表
     *
     * @param channelGroupUserQuery 查询条件
     * @param siteId                所属站点id
     * @return 渠道分组用户中间表列表信息
     */
    List<ChannelGroupUserListVO> select(ChannelGroupUserQuery channelGroupUserQuery, String siteId);

    /**
     * 查询渠道分组用户中间表记录数
     *
     * @param channelGroupUserQuery 查询条件
     * @param siteId                所属站点id
     * @return 渠道分组用户中间表记录数
     */
    int selectCount(ChannelGroupUserQuery channelGroupUserQuery, String siteId);

    /**
     * 分页查询渠道分组用户中间表
     *
     * @param channelGroupUserQuery 查询条件
     * @param siteId                所属站点id
     * @return 渠道分组用户中间表列表信息
     */
    Page<ChannelGroupUserListVO> selectPage(ChannelGroupUserQuery channelGroupUserQuery, String siteId);


    /**
     * 根据渠道分组用户中间表id查找
     *
     * @param channelGroupUserId 渠道分组用户中间表id
     * @param siteId             所属站点id
     * @return 渠道分组用户中间表
     */
    ChannelGroupUserDO selectDOById(String channelGroupUserId, String siteId);

    /**
     * 查询渠道分组用户中间表
     *
     * @param channelGroupUserQuery 查询条件
     * @param siteId                所属站点id
     * @return 渠道分组用户中间表列表
     */
    List<ChannelGroupUserDO> selectDO(ChannelGroupUserQuery channelGroupUserQuery, String siteId);


    /**
     * 通过userid查询管理的组id
     *
     * @param userId    用户id
     * @param tokenUser 当前用户
     * @return 组
     */
    List<ChannelGroupUserDO> selectGroupByUserId(String userId, TokenUser tokenUser);

    /**
     * 批量保存管理员
     *
     * @param channelGroupUserAddDTO 新增实体
     * @param tokenUser              当前用户
     * @return 1
     */
    Integer batchSave(ChannelGroupUserAddDTO channelGroupUserAddDTO, TokenUser tokenUser);

    /**
     * 删除分组的管理员
     *
     * @param channelGroupUserQuery 条件
     * @param tokenUser             当前用户
     * @return 1
     */
    Integer deleteGroupManager(ChannelGroupUserQuery channelGroupUserQuery, TokenUser tokenUser);
}


